package com.foodorder.entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * 门店实体类
 */
@Data
@Entity
@Table(name = "stores")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Store {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 门店名称
     */
    @Column(nullable = false, length = 100)
    private String name;

    /**
     * 门店地址
     */
    @Column(nullable = false, length = 255)
    private String address;

    /**
     * 门店电话
     */
    @Column(length = 20)
    private String phone;

    /**
     * 门店描述
     */
    @Column(length = 500)
    private String description;

    /**
     * 门店照片（JSON格式存储多张图片URL）
     */
    @Column(length = 1000)
    private String images;

    /**
     * 营业状态
     */
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private StoreStatus status = StoreStatus.OPEN;
    
    /**
     * 营业状态（业务层使用）
     */
    @Transient
    private BusinessStatus businessStatus;

    /**
     * 营业开始时间
     */
    private LocalTime openTime;

    /**
     * 营业结束时间
     */
    private LocalTime closeTime;

    /**
     * 经度
     */
    private BigDecimal longitude;

    /**
     * 纬度
     */
    private BigDecimal latitude;

    /**
     * 配送范围（公里）
     */
    private BigDecimal deliveryRange;

    /**
     * 起送价格
     */
    private BigDecimal minimumOrderAmount;

    /**
     * 配送费
     */
    private BigDecimal deliveryFee;

    /**
     * 平均配送时间（分钟）
     */
    private Integer averageDeliveryTime;

    /**
     * 门店评分
     */
    private BigDecimal rating;

    /**
     * 月销量
     */
    private Integer monthlySales;

    /**
     * 总销量
     */
    private Integer totalSales;

    /**
     * 营业执照号
     */
    @Column(length = 50)
    private String businessLicense;

    /**
     * 营业执照图片URL
     */
    @Column(length = 255)
    private String licenseImage;

    /**
     * 卫生许可证号
     */
    @Column(length = 50)
    private String hygieneLicense;

    /**
     * 卫生许可证图片URL
     */
    @Column(length = 255)
    private String hygieneLicenseImage;
    
    /**
     * 门店分类ID
     */
    private Long categoryId;
    
    /**
     * 门店标签（JSON数组格式）
     */
    @Column(length = 255)
    private String tags;

    /**
     * 创建时间
     */
    @CreationTimestamp
    @Column(nullable = false, updatable = false)
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    @UpdateTimestamp
    @Column(nullable = false)
    private LocalDateTime updatedAt;

    /**
     * 获取业务状态
     */
    public BusinessStatus getBusinessStatus() {
        if (this.status == null) {
            return BusinessStatus.UNKNOWN;
        }
        
        switch (this.status) {
            case OPEN:
                return BusinessStatus.OPEN;
            case CLOSED:
                return BusinessStatus.CLOSED;
            case SUSPENDED:
                return BusinessStatus.SUSPENDED;
            default:
                return BusinessStatus.UNKNOWN;
        }
    }

    /**
     * 门店状态枚举
     */
    public enum StoreStatus {
        /**
         * 营业中
         */
        OPEN,
        
        /**
         * 休息中
         */
        CLOSED,
        
        /**
         * 暂停营业
         */
        SUSPENDED
    }
    
    /**
     * 门店业务状态枚举（与StoreStatus保持一致，供业务层使用）
     */
    public enum BusinessStatus {
        /**
         * 营业中
         */
        OPEN,
        
        /**
         * 休息中
         */
        CLOSED,
        
        /**
         * 暂停营业
         */
        SUSPENDED,
        
        /**
         * 暂停营业（别名）
         */
        PAUSED,
        
        /**
         * 未知状态
         */
        UNKNOWN
    }
}